home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Suzy B Software 2
/
Suzy B Software CD-ROM 2 (1994).iso
/
extras
/
programm
/
gemfsc19
/
gemfsc19.lzh
/
GNUGEM27
/
VDIOUT.C
< prev
next >
Wrap
C/C++ Source or Header
|
1993-03-24
|
4KB
|
214 lines
/*
* Vdi output functions library interface
*
* v_pline polyline
* v_pmarker draw markers
* v_gtext draw text
* v_fillarea filled area
* v_cellarray draw array of rectangles
* v_contourfill flood fill
* vr_recfl fill rect
*
* ++jrb bammi@cadence.com
* modified: mj -- ntomczak@vm.ucs.ualberta.ca
*/
#include "common.h"
#ifdef __DEF_ALL__
#define L_v_pline
#define L_v_pmarke
#define L_v_gtext
#define L_v_fillar
#define L_v_cellar
#define L_v_contou
#define L_vr_recfl
#endif /* __DEF_ALL__ */
#ifdef L_v_pline
/* v_pline polyline
* returns void
*/
void v_pline(int handle, int count, int pxyarray[])
{
#ifdef __MSHORT__ /* we have 16 bit ints, just change vdi params */
_vdiparams[2] = (void *) &pxyarray[0];
#else /* 32 bit ints - let's copy */
register short i;
register short *pts = &_ptsin[0];
register int *pxy = &pxyarray[0];
for(i = count; i != 0; i-- )
{
*pts++ = *pxy++;
*pts++ = *pxy++;
}
#endif
__vdi__(VDI_CONTRL_ENCODE(6, count, 0, 0), handle);
#ifdef __MSHORT__
_vdiparams[2] = (void *)&_ptsin[0]; /* restore vdi parameters */
#endif
}
#endif /* L_v_pline */
#ifdef L_v_pmarke
/* v_pmarker draw markers
* returns void
*/
void v_pmarker(int handle, int count, int pxyarray[])
{
#ifdef __MSHORT__ /* we have 16 bit ints, just change vdi params */
_vdiparams[2] = (void *) &pxyarray[0];
#else /* 32 bit ints - let's copy */
register short i;
register short *pts = &_ptsin[0];
register int *pxy = &pxyarray[0];
for(i = count; i != 0; i-- )
{
*pts++ = *pxy++;
*pts++ = *pxy++;
}
#endif
__vdi__(VDI_CONTRL_ENCODE(7, count, 0, 0), handle);
#ifdef __MSHORT__
_vdiparams[2] = (void *)&_ptsin[0]; /* restore vdi parameters */
#endif
}
#endif /* L_v_pmarke */
#ifdef L_v_gtext
/* v_gtext draw text (extra super slow -- don't ask me why)
* returns void
*/
v_gtext(int handle, int x, int y, char *str)
{
unsigned char ch;
short *ptr = _intin;
_ptsin[0] = x;
_ptsin[1] = y;
while ( ch = (unsigned char) *str++)
*ptr++ = ch;
__vdi__(VDI_CONTRL_ENCODE(8, 1, (int)(ptr - _intin), 0), handle);
}
#endif /* L_v_gtext */
#ifdef L_v_fillar
/* v_fillarea filled area
* returns void
*/
void v_fillarea(int handle, int count, int pxyarray[])
{
#ifdef __MSHORT__ /* we have 16 bit ints, just change vdi params */
_vdiparams[2] = (void *) &pxyarray[0];
#else /* 32 bit ints - let's copy */
register short i;
register short *pts = &_ptsin[0];
register int *pxy = &pxyarray[0];
for(i = count; i != 0; i-- )
{
*pts++ = *pxy++;
*pts++ = *pxy++;
}
#endif
__vdi__(VDI_CONTRL_ENCODE(9, count, 0, 0), handle);
#ifdef __MSHORT__
_vdiparams[2] = (void *)&_ptsin[0]; /* restore vdi parameters */
#endif
}
#endif /* L_v_fillar */
#ifdef L_v_cellar
/* v_cellarray draw array of rectangles
* returns void
*/
void v_cellarray(int handle, int pxyarray[], int row_length,
int elements, int nrows, int write_mode, int colarray[])
{
short *wptr, *end;
wptr = _ptsin;
end = wptr + 4;
do {
*wptr++ = *pxyarray++;
} while (wptr < end);
wptr = (short *)&_contrl[7];
*wptr++ = row_length;
*wptr++ = elements;
*wptr++ = nrows;
*wptr = write_mode;
wptr = _intin;
end = wptr + (short)nrows * (short)elements;
while (wptr < end)
*wptr++ = *colarray++;
__vdi__(VDI_CONTRL_ENCODE(10, 2, (int)(wptr - _intin), 0), handle);
}
#endif /* L_v_cellar */
#ifdef L_v_contou
/* v_contourfill flood fill from seed point to either dsp.edge or colr index
* returns void
*/
void v_contourfill(int handle, int x, int y, int index)
{
_ptsin[0] = x;
_ptsin[1] = y;
_intin[0] = index;
__vdi__(VDI_CONTRL_ENCODE(103, 1, 1, 0), handle);
}
#endif /* L_v_contou */
#ifdef L_vr_recfl
/* vr_recfl fill rect
* returns void
*/
void vr_recfl(int handle, int pxyarray[])
{
#ifdef __MSHORT__ /* we have 16 bit ints, just change vdi params */
_vdiparams[2] = (void *) &pxyarray[0];
#else /* 32 bit ints - let's copy */
short *wptr = _ptsin;
*wptr++ = *pxyarray++;
*wptr++ = *pxyarray++;
*wptr++ = *pxyarray++;
*wptr = *pxyarray;
#endif
__vdi__(VDI_CONTRL_ENCODE(114, 2, 0, 0), handle);
#ifdef __MSHORT__
_vdiparams[2] = (void *)&_ptsin[0]; /* restore vdi parameters */
#endif
}
#endif /* L_vr_recfl */
/* -eof- */